This invention relates to the field of computer systems. More particularly, a system and methods are provided for facilitating and managing dynamic reconfiguration of computer resources through the use of a resource dependency graph.
Dynamic reconfiguration involves the dynamic allocation, reallocation or deallocation of computer system resources such as processors, memory, storage devices and so on. If done in an efficient and intelligent manner, dynamic reconfiguration can be used to arrange or re-arrange resources to meet the shifting demands of software executing on the system, and thereby promote more efficient use of the system resources.
However, dynamically reconfiguring a resource generally requires removing it from a current domain or set of resources that are providing one service, or working on one task, and adding it to a different domain. In order to remove the resource from a domain, all dependencies involving that resource must be identified and resolved. Most systems (e.g., some UNIX platforms) do not provide means for readily mapping a resource from its underlying physical device upward through all logical constructs built upon the device, or vice versa, and therefore make it difficult to identify such dependencies. In particular, protocol-based methods of determining resource dependencies do not track dependencies as they evolve, and thus do not allow accurate prediction of whether a desired dynamic reconfiguration operation is likely to succeed.
Instead, existing methods of dynamic reconfiguration require a reconfiguration operation to be attempted before its chance of success can be determined. In addition, some systems only allow for the reallocation or reassignment of virtual or logical resources, not physical resources.
Thus, when a dynamic reconfiguration of a particular resource is desired, protocol calls may be made to the resource's configuration software or device driver. Calls may also be made to various other configuration agents to determine whether they have any dependencies with the resource. A series of recursive calls may have to be made to trace chains of dependencies. After dependent devices are identified, the dynamic reconfiguration is attempted, with little predictability, if any, as to its success.
While attempting to determine the resource's dependencies, or attempting the actual reconfiguration, those dependencies may be changing (e.g., new dependencies may be added). Or, a device may refuse to release the resource when requested. As a result, the reconfiguration may fail because the resource has not been freed from all dependencies.
In addition, current methods of identifying and attempting dynamic resource reconfigurations are manual. The efficiency of selecting and implementing a dynamic reconfiguration could be improved by making the process automatic. In particular, it would be desirable for a system of resources to autonomously identify a better configuration or allocation scheme for its resources, and then perform a dynamic reconfiguration to attain that configuration. Such a system might periodically or continually search for better configurations.
However, identifying a configuration that is “better” than another (e.g., current) configuration can be difficult. Existing systems designed to identify a desirable reconfiguration of resources usually employ mathematical models. Such models are often flawed, particularly in their inability to accurately determine whether the performance of one configuration of resources would provide better performance than another configuration. Further, such models may be unable to identify a configuration that not only provided increased performance, but which also satisfies a set of constraints on system resources.
Thus, there is a need for a system and method of facilitating and managing dynamic reconfiguration of computer system resources, including physical devices, wherein the success or failure of a desired reconfiguration operation can be predicted before attempting the reconfiguration.